package ${sysTableVo.packageName}.action;

import cn.hutool.core.collection.ListUtil;
import com.jichangxiu.common.annotation.*;
import com.jichangxiu.common.entity.bo.PageResult;
import com.jichangxiu.framework.action.BaseAction;
import ${sysTableVo.packageName}.entity.dto.add.Add${sysTableVo.bigClassName};
import ${sysTableVo.packageName}.entity.dto.edit.Edit${sysTableVo.bigClassName};
import ${sysTableVo.packageName}.entity.dto.query.Query${sysTableVo.bigClassName};
import ${sysTableVo.packageName}.entity.vo.${sysTableVo.bigClassName}Vo;
import ${sysTableVo.packageName}.service.${sysTableVo.bigClassName}Service;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;

/**
 * ${sysTableVo.bigClassName}Action:
 *
 * @author ${sysTableVo.functionAuthor}
 * @create ${datetime}
 */
@Slf4j
@Rest("/${sysTableVo.moduleName}/${sysTableVo.businessName}")
@Tag(name = "${sysTableVo.functionName}控制器")
public class ${sysTableVo.bigClassName}Action extends BaseAction {

    @Resource
    private ${sysTableVo.bigClassName}Service ${sysTableVo.className}Service;

    /**
     * 新增${sysTableVo.functionName}
     *
     * @param add${sysTableVo.bigClassName} 新增${sysTableVo.functionName}视图对象
     * @return 是否成功
     */
    @Post
    @Operation(summary = "新增${sysTableVo.functionName}")
    @PreAuthorize("@jcx.hasPermission('${authPrefix}:add')")
    public String add(@RequestBody Add${sysTableVo.bigClassName} add${sysTableVo.bigClassName}) {
        return toStr(${sysTableVo.className}Service.add(add${sysTableVo.bigClassName}));
    }

    /**
     * 单（多）选删除${sysTableVo.functionName}
     *
     * @param ids ${sysTableVo.functionName}主键列表
     * @return 是否成功
     */
    @Delete
    @Operation(summary = "单（多）选删除${sysTableVo.functionName}")
    @PreAuthorize("@jcx.hasPermission('${authPrefix}:del')")
    public String del(@RequestBody String[] ids) {
        return toStr(${sysTableVo.className}Service.del(ListUtil.toList(ids)));
    }

    /**
     * 修改${sysTableVo.functionName}
     *
     * @param edit${sysTableVo.bigClassName} 修改${sysTableVo.functionName}视图对象
     * @return 是否成功
     */
    @Put
    @Operation(summary = "修改${sysTableVo.functionName}")
    @PreAuthorize("@jcx.hasPermission('${authPrefix}:edit')")
    public String edit(@RequestBody Edit${sysTableVo.bigClassName} edit${sysTableVo.bigClassName}) {
        return toStr(${sysTableVo.className}Service.edit(edit${sysTableVo.bigClassName}));
    }

    /**
     * 根据主键查询${sysTableVo.functionName}
     *
     * @param id ${sysTableVo.functionName}主键
     * @param isExtend 是否扩展
     * @return ${sysTableVo.functionName}详情
     */
    @Get("/{id}")
    @Operation(summary = "根据主键查询${sysTableVo.functionName}")
    @PreAuthorize("@jcx.hasPermission('${authPrefix}:info')")
    public ${sysTableVo.bigClassName}Vo info(@PathVariable("id") @NotBlank(message = "主键不能为空") String id, @RequestParam(value = "isExtend", required = false, defaultValue = "false") Boolean isExtend) {
        return ${sysTableVo.className}Service.info(id, isExtend);
    }

    /**
     * （可分页）查询${sysTableVo.functionName}列表
     *
     * @param query${sysTableVo.bigClassName} 查询视图对象
     * @return （分页）${sysTableVo.functionName}列表
     */
    @Get("/lists")
    @Operation(summary = "（可分页）查询${sysTableVo.functionName}列表")
    @PreAuthorize("@jcx.hasPermission('${authPrefix}:lists')")
    public PageResult lists(@ParameterObject Query${sysTableVo.bigClassName} query${sysTableVo.bigClassName}) {
        return pageResult(${sysTableVo.className}Service.lists(query${sysTableVo.bigClassName}));
    }

}
